package com.zenithmind.chat.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;

/**
 * 添加来源枚举 - 遵循开闭原则
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Getter
public enum AddSource {
    
    /**
     * 好友申请
     */
    FRIEND_REQUEST("friend_request", "好友申请"),
    
    /**
     * 手机号搜索
     */
    PHONE_SEARCH("phone_search", "手机号搜索"),
    
    /**
     * 用户名搜索
     */
    USERNAME_SEARCH("username_search", "用户名搜索"),
    
    /**
     * 二维码扫描
     */
    QR_CODE("qr_code", "二维码扫描"),
    
    /**
     * 群组介绍
     */
    GROUP_INTRO("group_intro", "群组介绍"),
    
    /**
     * 系统推荐
     */
    SYSTEM_RECOMMEND("system_recommend", "系统推荐"),
    
    /**
     * 导入通讯录
     */
    CONTACT_IMPORT("contact_import", "导入通讯录"),
    
    /**
     * 其他方式
     */
    OTHER("other", "其他方式");

    /**
     * 来源代码 - 用于数据库存储
     */
    @EnumValue
    @JsonValue
    private final String code;

    /**
     * 来源描述
     */
    private final String description;

    /**
     * 构造函数
     */
    AddSource(String code, String description) {
        this.code = code;
        this.description = description;
    }

    /**
     * 根据代码获取枚举
     * 
     * @param code 来源代码
     * @return 对应的枚举值
     */
    public static AddSource fromCode(String code) {
        if (code == null || code.trim().isEmpty()) {
            return OTHER;
        }
        
        for (AddSource source : values()) {
            if (source.getCode().equals(code)) {
                return source;
            }
        }
        
        // 兼容旧数据，如果是中文描述，尝试匹配
        for (AddSource source : values()) {
            if (source.getDescription().equals(code)) {
                return source;
            }
        }
        
        return OTHER;
    }
}
